package edu.fasta.sisinfo2.poker;

import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import edu.fasta.sisinfo2.gui.JPanelFondo;
import edu.fasta.sisinfo2.gui.PantallaJuego;
import edu.fasta.sisinfo2.gui.RecargarFichas;
import edu.fasta.sisinfo2.gui.SignIn;
import edu.fasta.sisinfo2.main.CrearCliente;
import edu.fasta.sisinfo2.net.AllIn;
import edu.fasta.sisinfo2.net.Call;
import edu.fasta.sisinfo2.net.Check;
import edu.fasta.sisinfo2.net.Cliente;
import edu.fasta.sisinfo2.net.DatosUsuario;
import edu.fasta.sisinfo2.net.InterfazComandoJugador;
import edu.fasta.sisinfo2.net.Fold;
import edu.fasta.sisinfo2.net.InterfazComandoServer;
import edu.fasta.sisinfo2.net.NombreJugador;
import edu.fasta.sisinfo2.net.Raise;
import javax.swing.JPanel;
import java.awt.BorderLayout;

import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;


public class PokerControllerCliente extends Thread{
	

	private Cliente cliente;
	private PantallaJuego pantalla;
	private RecargarFichas pantallaRecarga;
	private InterfazComandoServer comandoRecibido;
	private String nombreJugador="";
	private String pswJugador="";


	/**
	 * @wbp.parser.entryPoint
	 */
	public PokerControllerCliente(){
		

		
	}
	
	


	public void run(){ //execute o run
		try {
				
			if(cliente.iniciar()){
			
				SignIn login = new SignIn(this);			//levantar formulario de login
				login.setModal(true);
				login.setVisible(true);
	
				this.setNombreJugador(login.getNombreUsuario());
				this.setPswJugador(login.getPswUsuario());
				
				
				this.iniciarJuegoCliente();
				
				
			}else{
				JOptionPane.showMessageDialog(null,"Error de conexion. Revise IP y puerto.");
				new CrearCliente().main(null);
				
			}
		} 
		catch (IOException excepcionES) {
			System.out.println("error de ejecucion de servidor :");
			
		}
		
	}


	public InterfazComandoServer recibirComando() {
		InterfazComandoServer unComando=null;
		unComando = this.getCliente().recibirDatos();
		return unComando;

	}

	public void enviarComando(InterfazComandoJugador unComando) {
		this.getCliente().enviarDatos(unComando);
		
	}
	
	private void iniciarJuegoCliente() {
		pantalla= new PantallaJuego("Texas UFasta - " + this.getNombreJugador(), this);//levantar la GUI
		while (true){
		this.setComandoRecibido(recibirComando());
		this.getComandoRecibido().ejecutarComando(this.getPantalla());
		}
		
		
	}


	public Cliente getCliente() {
		return cliente;
	}




	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}




	public PantallaJuego getPantalla() {
		return pantalla;
	}




	public void setPantalla(PantallaJuego pantalla) {
		this.pantalla = pantalla;
	}




	public void jugadaCheck() {
		this.enviarComando(new Check());
		
	}




	public void jugadaFold() {
		this.enviarComando(new Fold());
		
	}




	public void jugadaCall(int valor) {
		//tengo que usar el valor recibido por mensaje del campo apuestaActual 
		//int valor = Integer.parseInt(this.getPantalla().getCantidadApuestatxt().getText());
		this.enviarComando(new Call(valor));
		
	}




	public void jugadaAllIn(int valorSaldo) {
		this.enviarComando(new AllIn(valorSaldo));
		
	}




	public void jugadaRaise() {
		this.enviarComando(new Raise(this.getPantalla().getCantidadApuestatxt().getText()));
		
	}

	public String getNombreJugador() {
		return nombreJugador;
	}


	public void setNombreJugador(String nombreJugador) {
		this.nombreJugador = nombreJugador;
	}


	public InterfazComandoServer getComandoRecibido() {
		return comandoRecibido;
	}


	public void setComandoRecibido(InterfazComandoServer comandoRecibido) {
		this.comandoRecibido = comandoRecibido;
	}


	public String getPswJugador() {
		return pswJugador;
	}


	public void setPswJugador(String pswJugador) {
		this.pswJugador = pswJugador;
	}




	public RecargarFichas getPantallaRecarga() {
		return pantallaRecarga;
	}




	public void setPantallaRecarga(RecargarFichas pantallaRecarga) {
		this.pantallaRecarga = pantallaRecarga;
	}

	public void finalizarPCC(){
		this.getCliente().cerrarConexion();		
		
	}

	
}